package com.taobao.top
{
	import com.adobe.serialization.json.JSON;
	import com.taobao.top.model.Area;
	import com.taobao.top.converter.AreaConverter;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	/**
	 * 地址区域 
	 * @author 达达
	 * 
	 */	
	public class TOPAreas extends EventDispatcher
	{
		public function TOPAreas()
		{
		}
		/**
		 * 查询标准地区码
		 * @param fields 需返回的字段列表.可选值:Area 结构中的所有字段;多个字段之间用","分隔.如:area_id,area_type,area_name,parent_id,zip.<br/>可以从com.taobao.top.enum.AreaFields中获取枚举。
		 * @see com.taobao.top.enum.AleaFields
		 */		
		public function getAreas(fields:Array):void
		{
			var topURLLdr:TOPURLLoader = new TOPURLLoader();
			var reqParamArr:Array = new Array();
			reqParamArr=[new TopRequestParam("method","taobao.areas.get"),new TopRequestParam("fields",TOPUtil.StringArrayToStringWidthComma(fields))];
			topURLLdr.addEventListener(Event.COMPLETE,areasGetHandler);
			topURLLdr.loadData(reqParamArr);
		} 
		
		/**
		 * 载入事件处理器 
		 * @param event
		 * 
		 */		
		private function areasGetHandler(event:Event):void
		{
			switch(event.type)
			{
				case Event.COMPLETE:
					var areasArr:Array = areasGetJsonParser(event.target.data);
				break;
				default:
					 dispatchEvent(event.clone());
				break;
			}
		}
		
		/**
		 * 将JSON 字符串反序列化 
		 * @param jsonStr JSON字符串
		 * @return 地区区域数组
		 * 
		 */		
		private function areasGetJsonParser(jsonStr:String):Array
		{
			if(TOPError.isError(jsonStr))
			{
				var topError:TOPError = TOPError.parseError(jsonStr);
				//dispatchEvent(new ErrorEvent(ErrorEvent.ERROR,false,false,
			}else
			{
				return objToAreasArray((JSON.decode(jsonStr) as Object).rsp);
			}
			return null;
		}
		/**
		 * 将JSON反序列化得到的对象进行遍历得到地区区域数组 
		 * @param obj JSON反序列化得到的对象
		 * @return 地区区域数组
		 * 
		 */		
		private function objToAreasArray(obj:Object):Array
		{
			var areasArr:Array = new Array();
			for each(var arObj:Object in obj.areas)
			{
				areasArr.push(AreaConverter.convert(arObj));
			}
			 return areasArr;
		}
	}
}